package adapter;

/**
 * 适配器模式：1.原接口不满足需求，需要拓展；2.相似性的多个接口做功能的统一
 * 原接口无法修改；
 * 原接口功能老旧
 * 统一多个类的接口设计
 * 过渡升级旧接口
 * 依赖外部系统
 * 适配不同数据格式
 * 不同接口协议转换
 * 原：
 *  用户 -> 本地实现
 * 新：
 *  用户 -> Adapter -> 外部实现
 *
 * =>
 * BufferedReader中的InputStreamReader是一个Adapter，将字节数据变为字符数据
 * 优点：
 * 不修改原有接口，又能扩展新功能，适配器模式是最好的打补丁模式
 * 使用外部组合做新功能扩展，无需重复开发部门功能
 * 可以转化不同数据格式或协议
 */
public class AdapterTest {

    public static void main(String[] args) {
        String str = "[abcde]";
//        TargetAbstraction filter = new TargetAbstractionImpl();
        TargetAbstraction filter = new Adapter(new OhterClass());
        String result = filter.filter(str);
        System.out.println(result);
    }
}
